iT邦幫忙

2022 iThome 鐵人賽

DAY 6
0
AI & Data

跟著黑蛋用Streamlit速成天文資料分析Web App系列 第 6

[5]:用Astroquery套件取得系外行星資料表

  • 分享至 

  • xImage
  •  

就在黑蛋用API取得系外行星資料表,並將它整理匯出成客戶所需的CSV檔後的隔天,他意外發現「以Astroquery套件擷取線上天文觀測資料」這場2018年台灣Python年會的演講。看完演講錄影後,黑蛋了解到,Astroquery是一個用來查詢、取得天文資料的Python套件,它能針對不同天文資料庫服務,用統一的Python語法,以星體名稱、星體座標範圍或其它篩選條件,過濾出資料庫所屬資料。藉由Astroquery,可以取得同類型星體的參數統整資料表,或是特定星體在不同電磁波段的影像、光譜、時序等觀測資料。

# Astroquery能針對不同天文資料庫服務,用統一的Python語法,以星體名稱、星體座標範圍或其它篩選條件,過濾出資料庫所屬資料
from astroquery.database_service import DatabaseService

object_result = DatabaseService.query_object(object_name='')
region_result = DatabaseService.query_region(coordinates='', radius='')
criteria_result = DatabaseService.query_criteria(**criteria)

這套件引起黑蛋的興趣 ,若Astroquery也能取得NASA系外行星資料庫的資料,或許能讓程式更為簡潔,不用寫上落落長的API網址。啊哈,他在Astroquery文件中找到他要的資訊,可以用以下程式碼取得系外行星資料表:

from astroquery.ipac.nexsci.nasa_exoplanet_archive import NasaExoplanetArchive

exoplanet_table = NasaExoplanetArchive.query_criteria(
    table='資料表名稱', select='要取得的欄位,以逗號區隔'
)

另外,他還發現Astroquery回傳的資料表是一個叫做astropy.table的物件,若要將資料表轉成Pandas的DataFrame,需要用該物件的to_pandas()方法。最後,他用Astroquery改寫了昨天用來匯出系外行星資料表CSV檔的Python script。

# Astroquery版的exoplanet_table_exporter.py
from datetime import datetime
from astroquery.ipac.nexsci.nasa_exoplanet_archive import NasaExoplanetArchive

def get_exoplanet_table_by_astroquery():
    table_name = 'pscomppars'
    columns = 'pl_name,hostname,sy_dist,pl_orbper,pl_bmasse,pl_rade,disc_year,discoverymethod'
    exoplanet_table = NasaExoplanetArchive.query_criteria(
        table=table_name, select=columns
    )
    exoplanet_table = exoplanet_table.to_pandas()
    exoplanet_table = exoplanet_table.rename(
        columns={
            'pl_name': '行星名稱',
            'hostname': '所屬恆星名稱',
            'sy_dist': '與地球的距離(單位:秒差距)',
            'pl_orbper': '行星軌道週期(單位:天)',
            'pl_bmasse': '行星質量(單位:地球質量)',
            'pl_rade': '行星半徑(單位:地球半徑)',
            'disc_year': '發現年份',
            'discoverymethod': '發現方法'
        }
    )
    exoplanet_table.sort_values(
        by='發現年份', ascending=False, inplace=True, ignore_index=True
    )

    return exoplanet_table

exoplanet_table = get_exoplanet_table_by_astroquery()
exoplanet_table.to_csv(
    f"./exoplanet_table_{datetime.today().strftime('%Y%m%d')}.csv", index=False
)

此系列文由蘇羿豪撰寫,以「創用CC 姓名標示 4.0(CC BY 4.0)國際版授權條款」釋出。此系列文也同步在MattersMirror平台連載。


上一篇
[4]:用NASA系外行星資料庫的API取得資料表
下一篇
[6]:再版系外行星資料簡介app,添加範例程式於頁面上
系列文
跟著黑蛋用Streamlit速成天文資料分析Web App30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言